// BIMFACE 访问凭证相关接口
// https://bimface.com/docs/authentication/v1/api-reference/getViewTokenByFileIdUsingGET.html

import bimfaceHttp from '@/api/Bimface';
import { AccessTokenModel, ViewTokenModel } from './model/tokenModel';
import { BimfaceID } from '@/hooks/bimface/types/bimface';

enum Api {
  AccessToken = '/oauth2/token',
  ViewToken = '/view/token',
  ChildFileViewToken = '/data/v2/integrations',
}

/**
 * @abstract: 获取Access Token
 * @description: 在调用其他API之前，必须先获取Access Token。Access Token代表了用户当前应用的身份，用户可以通过Access Token对自己应用内的文件发起文件上传、下载、删除、模型转换、模型集成、模型对比等操作，同时也能访问所有BIMFACE的数据接口获取轻量化后的模型信息。Access Token有效期为7天，7天内该Token不会发生改变。
 */
export function getAccessToken(basicAuth: string) {
  return bimfaceHttp.post<AccessTokenModel>({
    url: Api.AccessToken,
    headers: {
      Authorization: `Basic ${basicAuth}`,
    },
  });
}

/**
 * @abstract: 获取模型的View Token
 * @description: View Token代表对单个模型、集成模型、模型对比、场景的临时访问凭证，只能访问对应的模型数据。需要通过使用应用的Access Token以及fileId、integrateId、compareId、submodelId或sceneId 获取View Token, 然后把View Token传入前端JavaScript组件提供的接口中，即可加载和浏览文件所包含的三维模型或二维图纸。View Token有效期为12小时，为了减少用户重复请求View Token的次数，每次使用View Token都会重置有效期为12小时。
 */
export function getModelViewToken(modelid: string | BimfaceID) {
  if (typeof modelid === 'string') {
    return bimfaceHttp({
      method:"get",
      url: '/view/token' + `?fileId=${modelid}`,
    });
  } else {
    return bimfaceHttp({
      method:"get",
      url: '/view/token' + `?${modelid.key}=${modelid.value}`,
    })
  }
}

/**
 * @abstract: 获取子文件的View Token
 * @description: 一般使用在获取不随着模型集成而集成的模型信息，如图纸，视图等。
 */
export function getChildFileViewToken(integrateId: number, fileId: number) {
  return bimfaceHttp.post<ViewTokenModel>({
    url: Api.ChildFileViewToken + `/${integrateId}/files/${fileId}/viewToken`,
  });
}
